perm filename NUMBER.MAN[VLI,LSP] blob sn#382041 filedate 1978-09-08 generic text, type T, neo UTF8











                                   CHAPITRE 4

                                 LES NOMBRES



     VLISP possede deux types de nombres :  les nombres  entiers  et  les
     nombres  flottants.   Ils sont stockes dans une zone de longeur fixe
     geree dynamiquement.  Si  cette  zone  se  revele  trop  petite,  le
     message d'erreur suivant apparait :
        ** no room for numbers.
     Cette erreur est fatale.  Il faut augmenter la  taille  de  la  zone
     allouee  aux  nombres  (dans  la  fonctions CONFIGURATION du fichier
     initial CONFIG.INI) et relancer le travail.


     Si durant un calcul, une  exception  arithmetique  se  produit,  une
     erreur apparait, avec comme libelle :
        ** arithmetic exception. PC : <pc>
     dans lequel <pc> est la valeur du Program Control.  Ce  PC  contient
     en  partie  droite  la  valeur  du compteur ordinal de l'instruction
     ayant provoquee  l'interruption  et  en  partie  gauche  l'etat  des
     indicateurs  (en  particulier les indicateurs debordement d'entier ,
     debordement flottant , division par 0 ...  cf:  SYSTEM REF.   MANUAL
     pg.  2-58 pour avoir une description complete de ces indicateurs).

     Certaines fonctions (les fonctions de conversion, les  fonctions  de
     l'arithmetique  mixte et les fonctions de comparaison mixte) testent
     si leur(s) argument(s) sont des nombres.  Dans le cas ou ils  ne  le
     seraient pas, une erreur apparait.  Le libelle de cette erreur est :
        <fonction> :  ** non numeric arg :  <argument>
     dans lequel le nom de  la  fonction  et  l'argument  incrimine  sont
     imprimes.

     Un certain nombre de fonctions mathematiques ont ete "empruntees"  a
     la  bibliotheque  FORTRAN  (ex:  les fonctions SQRT, SIN, ATAN ...).
     Ces fonctions emetttent parfois des diagnostics d'erreurs qui  leurs
     sont  propres  (par  ex:   la tentative de calcul de la racine carre
     d'un nombre negatif ...).  Ces erreurs  ne  sont  pas  fatales  sous
     VLISP mais le resultat du calcul est bien evidemment eronne.
     VLISP 10 . 3    Manuel de Reference                         Page 4-2


     4.1  REPRESENTATION DES NOMBRES

     La representation externe des  nombres  entiers  est  une  suite  de
     digits  dans la base de numeration courante.  Cette base est definie
     par les fonctions :
        (STATUS 5 <n>) en entree 
        (STATUS 6 <n>) en sortie
     dans lesquelles <n> est un  nombre  compris  entre  2  et  16.   Par
     defaut, la valeur de ces bases est de 10.

     Il existe  un  macro-caractere  standard  qui  permet  de  lire  des
     S-expressions  en  supposant  que tous les nombres qui y sont inclus
     sont represente en octal, l'anti-slash \ .  Il possede la definition
     suivante :

        (DMC "\" ()
           (PUSH (STATUS 5))     ; sauve l'ancienne base ;
           (STATUS 5 8)          ; base d'entree octale ;
           (PROG1                ; puis lit une S-expression (qui ;
              (READ)             ; sera ramenee en valeur) et ;
              (STATUS 5 (POP)))) ; restaure l'ancienne base ;

     ex : \(730 . 272) est equivalent a  (472 . 186)

     Les nombres entiers peuvent etre signes ou non.  Le  traitement  des
     signes est controle par des bits du r.g. :
     bit 12 du r.g.  en entree un nombre peut debuter par le signe +
     bit 13 du r.g.  en entree un nombre peut debuter par le signe -
     bit 22 du r.g.  en sortie  les  nombres  positifs  debutent  par  le
     caractere -
     bit 23 du r.g.  en sortie  les  nombres  negatifs  debutent  par  le
     caractere -

     Ces nombres sont stockes en memoire sur un mot (de  36  bits);   ils
     doivent   donc   etre   compris   dans   l'intervalle   [ -2 ↑ 35  ,
      +2 ↑ 35 - 1 ] c'est-a-dire [-34359738368 , +34359738367].

     La representation externe des nombres flottants  est  une  suite  de
     digits  decimaux suivie immediatement par un point decimal ( .  ) et
     suivie optionnellement par une fraction  decimale  egalement.   Pour
     garder  une  precision  de 8 digits un exposant peut etre rajoute en
     notation "E".   Cette  derniere  forme  d'ecriture  n'est  toutefois
     disponible  qu'en  sortie  actuellement.  Les nombres flottants sont
     stockes en memoire sur un mot (de 36 bits) qui  contient  1  bit  de
     signe, 8 bits d'exposant et 27 bits de mantisse.

     Il n'existe a l'heure  actuelle  ni  de  nombres  flottants  "double
     precision", ni de nombres complexes, ni de "Bignums".
     VLISP 10 . 3    Manuel de Reference                         Page 4-3


     4.2  LES TEST DE TYPE

     (NUMBP <s>) [SUBR a 1 argument]

          Cette fonction sert a tester si l'argument <s> est un nombre de
          n'importe  quel  type.   si l'argument <s> est un nombre, NUMBP
          ramene <s> sinon NUMBP ramene NIL.

          ex : (NUMBP (ADD1 67))      -> 68
               (NUMBP -56.89)         -> -56.89
               (NUMBP "Nan")          -> NIL


     (INUMBP <s>) [SUBR a 1 argument]

          teste si l'argument <s> est un "petit entier" i.e.   un  nombre
          entier  ayant  une representation unique dans l'interprete.  Si
          <s> est un petit entier , INUMBP ramene ce nombre sinon  INUMBP
          ramene  NIL.  Cette fonction est principalement utilisee par le
          compilateur pour ameliorer  le  code  genere :   en  effet  les
          comparaisons  de  petits  entiers se font sur des adresses.  Le
          nombre de  petits  entiers  est  determinee  au  moment  de  la
          generation  du  systeme VLISP.  D'une maniere standard tous les
          nombres entiers dans l'intervale [-127 , +511] sont des  petits
          entiers.

          ex : (INUMBP 78)     -> 78
               (INUMBP -2558)  -> NIL
               (EQP 12 12)     -> T (toujours, si 12 est un petit entier)


     (FIXP <s>) [SUBR a 1 argument]

          Cette fonction sert a tester si l'argument <s>  est  un  nombre
          entier.   Si  <s>  est  un  nombre entier FIXP ramene ce nombre
          sinon FIXP ramene NIL.

          ex : (FIXP 78)     ->  78
               (FIXP -8878)  ->  -8878
               (FIXP 12.2)   ->  NIL


     (FLOATP <s>) [SUBR a 1 argument]

          Cette fonction sert a tester si l'argument <s>  est  un  nombre
          flottant.   Si  <s>  est  un  nombre  flottant FLOATP ramene ce
          nombre sinon FLOATP ramene NIL.

          ex : (FLOATP 100)    ->  NIL
               (FLOATP 100.1)  ->  100.1
     VLISP 10 . 3    Manuel de Reference                         Page 4-4


     (TYPNUMB <s>) [SUBR a 1 argument]

          cette fonction teste le type du nombre  donne  en  argument  et
          ramene l'atome :
          - FIX   si l'argument <n> est de type entier,
          - FLOAT si l'argument <n> est de type flottant,
          - NIL   si l'argument <n> n'est pas un nombre.

          ex : (TYPNUMB 14)    ->  FIX
               (TYPNUMB 14.4)  ->  FLOAT
               (TYPNUMB "ou")  ->  NIL



     4.3  LES CONVERSIONS

     Ces fonctions testent si leur argument est un nombre.  Dans  le  cas
     ou il ne l'est pas, une erreur apparait.  Le libelle de cette erreur
     est :
        <fonction> :  ** non numeric arg :  <argument>
     dans lequel le nom de  la  fonction  et  l'argument  incrimine  sont
     imprimes.


     (FIX <n>) [SUBR a 1 argument]

          convertit le nombre flottant <n> en son equivalent entier.   Un
          calcul  d'arrondi  est  effectue  automatiquement de la maniere
          suivante :  la partie entiere est incrementee de 1 si la partie
          fractionnaire est >= 0.5 (pour les nombres negatifs le test est
          <= a 0.5 ).

          EX :  (FIX 3.14)  ->  3
                (FIX 3.98)  ->  4
                (FIX 3)     ->  3

     (FLOAT <n>) [SUBR a 1 argument]

          convertit le nombre entier <n> en son equivalent flottant.

          ex :  (FLOAT 3)          ->  3.
                (FLOAT -2)         ->  -2.
                (FLOAT 120000000)  ->  1.2E8
                (FLOAT 3.14)       ->  3.14
     VLISP 10 . 3    Manuel de Reference                         Page 4-5


     4.4  ARITHMETIQUE ENTIERE

     Les  fonctions  qui  vont  etre  decrites  utilisent  des  operandes
     supposes  de type entier.  Ces fonctions n'effectuent aucun controle
     de validite de type.  Si les  arguments  ne  sont  pas  des  nombres
     entiers,   ces   fonctions  livrent  en  general  de  bien  etranges
     resultats.   Toutefois  un  calcul   impossible   povoque   l'erreur
     ** arithmetic exception (voir cette erreur).

     (ABS <n>) [SUBR a 1 argument]

          ramene la valeur absolue de l'argument <n>.

          ex : (ABS 10)   ->  10
               (ABS -10)  ->  10


     (ADD1 <n>) [SUBR a 1 argument]

          ramene la valeur :  <n> + 1 .

          ex :  (ADD1 6)   ->  7
                (ADD1 -4)  ->  -3


     (DIFFER <n1> ...  <nN>) [SUBR a N arguments]

          ramene la valeur :  <n1> - <n2> - ...  - <nN>

          ex : (DIFFER 6)         ->  6
               (DIFFER 12 7 3)    ->  2


     (MAX <n1> ...  <nN>) [SUBR a N arguments]

          ramene la valeur maximum des <n1> ...  <nN>.

          ex : (MAX 1 3 5 3 1)     ->  5


     (MIN <n1> ... <nN>)   [SUBR a N arguments]

          ramene la valeur minimum des <n1> ... <nN>.

          ex : (MIN 5 4 3 4 )     ->  3


     (MINUS <n>) [SUBR a 1 argument]

          ramene la valeur :  - <n>

          ex : (MINUS -10)   ->  10
     VLISP 10 . 3    Manuel de Reference                         Page 4-6


               (MINUS 25)    ->  -25


     (PLUS <n1> ...  <nN>) [SUBR a N arguments]

          ramene la valeur :  <n1> + <n2> + ...  + <nN>

          ex : (PLUS 5 6)      ->  11
               (PLUS 5 6 4)    ->  15


     (QUO <n1> ...  <nN>) [SUBR a N arguments]

          ramene la valeur du quotient de :  <n1> / <n2> / ...  / <nN>

          ex : (QUO 20 5)     ->  4
               (QUO 40 4 2)   ->  5


     (REM <n1> <n2>) [SUBR a 2 arguments]

          ramene la valeur du reste de la division entiere  de  <n1>  par
          <n2>.

          ex : (REM 11 3)  ->  2
               (REM 14 22) ->  14


     (SUB1 <n>) [SUBR a 1 argument]

          ramene la valeur :  <n> - 1

          ex : (SUB1 7)   ->  6
               (SUB1 -9)  ->  -10


     (TIMES <n1> ...  <nN>) [SUBR a N arguments]

          ramene la valeur :  <n1> * <n2> * ...  * <nN>

          ex : (TIMES 10 4)   ->  40
               (TIMES 2 3 4)  ->  24
     VLISP 10 . 3    Manuel de Reference                         Page 4-7


     4.5  COMPARAISONS ENTIERES

     Ces fonctions n'effectuent aucun test de validite de type.   Si  les
     arguments  de ces fonctions ne sont pas des nombres, leurs resultats
     ne sont pas significatifs.  Elles ne provoquent jamais d'erreur.


     (EQN <n1> <n2>) [SUBR a 2 arguments]

          ramene <n1> si les 2 nombres <n1> et <n2> sont egaux, sinon EQN
          ramene NIL.

          ex : (EQN 58 58)     ->  58
               (EQN 34 34.)    ->  NIL
               (EQN 21963283741 21963283741.) -> 21963283741
                      (et c'est bien le seul cas d'egalite mixte!)


     (EVENP <n>) [SUBR a 1 argument]

          ramene <n> si <n> est pair.  Si <n>  est  impair  EVENP  ramene
          NIL.

          ex : (EVENP 4)   ->  4
               (EVENP -5)  ->  NIL


     (GE <n1> <n2> ...  <nN-1> <nN>) [SUBR a N arguments]

          si <n1> >= <n2> >= ...  >=  <nN-1>  >=  <nN>  alors  GE  ramene
          <nN-1> sinon GE ramene NIL.

          ex : (GE 3 7)      ->  NIL
               (GE 7 7 4 3)  ->  4


     (GEZP <n>) [SUBR a 1 argument]

          ramene <n> si <n> est plus grand ou egal a 0.  Si <n> est  plus
          petit que 0 GEZP ramene NIL.

          ex : (GEZP 5)   ->  5
               (GEZP 0)   ->  0
               (GEZP -5)  ->  NIL


     (GT <n1> <n2> ...  <nN-1> <nN>) [SUBR a N arguments]

          si <n1> > <n2> > ...  > <nN-1> > <nN> alors  GT  ramene  <nN-1>
          sinon GT ramene NIL.

          ex : (GT 5 5)    ->  NIL
     VLISP 10 . 3    Manuel de Reference                         Page 4-8


               (GT 7 4 3)  ->  4


     (GZP <n>) [SUBR a 1 argument]

          ramene <n> si <n> est plus grand que 0.  Si <n> est plus  petit
          ou egal a 0 GZP ramene NIL.

          ex : (GZP 5)   ->  5
               (GZP 0)   ->  NIL
               (GZP -5)  ->  NIL


     (LE <n1> <n2> ...  <nN-1> <nN>) [SUBR a N arguments]

          si <n1> <= <n2> <= ...  <=  <nN-1>  <=  <nN>  alors  LE  ramene
          <nN-1> sinon LE ramene NIL.

          ex : (LE 5 5)     ->  5
               (LE 4 4 6 9) ->  9


     (LEZP <n>) [SUBR a 1 argument]

          ramene <n> si <n> est plus petit ou egal a 0.  Si <n> est  plus
          grand que 0 LEZP ramene NIL.

          ex : (LEZP 5)   ->  NIL
               (LEZP 0)   ->  0
               (LEZP -5)  ->  -5


     (LT <n1> <n2> ...  <nN-1> <nN>) [SUBR a N arguments]

          si <n1> < <n2> < ...  < <nN-1> < <nN> alors  LT  ramene  <nN-1>
          sinon LT ramene NIL.

          ex : (LT 5 5)    ->  NIL
               (LT 4 5 6)  ->  5


     (LZP <n>) [SUBR a 1 argument]

          ramene <n> si <n> est plus petit que 0.  Si <n> ets plus  grand
          ou egal a 0 LZP ramene NIL.

          ex : (LZP 5)   ->  NIL
               (LZP 0)   ->  NIL
               (LZP -5)  ->  -5
     VLISP 10 . 3    Manuel de Reference                         Page 4-9


     (NEQN <n1> <n2>) [SUBR a 2 arguments]

          ramene <n1> si les deux nombres <n1> et <n2>  sont  differents.
          NEQN ramene NIL si les deux nombres sont egaux.  Cette fonction
          est equivalente a (NOT (EQN <n1> <n2>)).

          ex : (NEQN 5 6)   ->  5
               (NEQN -3 -3) ->  NIL


     (NEROP <n>) [SUBR a 1 argument]

          ramene <n> si <n> est different de 0.   Si  <n>  egal  0  NEROP
          ramene NIL.

          ex : (NEROP 5)   ->  5
               (NEROP 0)   ->  NIL
               (NEROP -5)  ->  -5


     (ODDP <n>) [SUBR a 1 argument]

          ramene <n> si <n> est impair.  Si <n> est pair ODDP ramene NIL.

          ex : (ODDP -4)   ->  NIL
               (ODDP -5)   ->  -5


     (ZEROP <n>) [SUBR a 1 argument]

          ramene 0 si <n> est egal a 0 sinon ramene NIL.

          ex : (ZEROP 5)   ->  NIL
               (ZEROP 0)   ->  0
               (ZEROP -5)  ->  NIL



     4.6  ARITHMETIQUE MIXTE

     Ces fonctions testent si leurs arguments sont des nombres.  Dans  le
     cas ou ils ne le sont pas, une erreur apparait.  Le libelle de cette
     erreur est :
        <fonction> :  ** non numeric arg :  <argument>
     dans lequel le nom de  la  fonction  et  l'argument  incrimine  sont
     imprimes.

     Ces arguments peuvent etre de  n'importe  quel  type  :   entier  ou
     flottant.   Si  l'un des arguments est flottant, le resultat sera un
     nombre flottant ;  si tous les arguments sont  de  type  entier,  le
     resultat  sera un nombre entier.  Il y a donc conversion automatique
     des arguments avec priorite aux nombres flottants.
     VLISP 10 . 3    Manuel de Reference                        Page 4-10


     (1+ <n>) [SUBR a 1 argument]

          ramene la valeur :  <n> + 1 .

          ex : (1+ 3)    ->  4
               (1+ 1.2)  ->  2.2


     (1- <n>) [SUBR a 1 argument]

          ramene la valeur :  <n> - 1 .

          ex : (1- 3)   ->  2
               (1- 3.2) ->  2.2


     (+ <n1> <n2>) [SUBR a 2 arguments]

          ramene la somme des 2 arguments :  <n1> + <n2> .

          ex : (+ 2 3)     ->  5
               (+ 2 3.2)   ->  5.2
               (+ 2.3 3)   ->  5.3
               (+ 2.3 3.3) ->  5.6


     (- <n1> <n2>) [SUBR a 2 arguments]

          ramene la difference des 2 arguments :  <n1> - <n2> .

          ex : (- 3 1)     ->  2
               (- 3 1.)    ->  2.
               (- 3.2 1.1) ->  2.1


     (* <n1> <n2>) [SUBR a 2 arguments]

          ramene le produit des 2 arguments :  <n1> * <n2> .

          ex : (* 3 2)      ->  6
               (* 3 2.1)    ->  6.3
               (* 3. 2.2)   ->  6.6


     (// <n1> <n2>) [SUBR a 2 arguments]

          ramene le quotient des 2  arguments  :   <n1>  //  <n2>  .   Le
          caractere  /  est un caractere special, il faut le doubler pour
          utiliser cette fonction :  on doit ecrire (// 3 2.) et non (/ 3
          2.).

          ex : (// 3 2)     ->  1
     VLISP 10 . 3    Manuel de Reference                        Page 4-11


               (// 3 2.)    ->  1.5
               (// 1 3.)    ->  0.3333333


     (** <n1> <n2>) [SUBR a 2 arguments]

          ramene la valeur de l'evaluation de <n1> a la puissance <n2>.

          ex : (** 2 3)     ->  8
               (** 2. 4)    ->  16.
               (** 2  5.)   ->  32.
               (** 2  0.5)  ->  1.414214
               (** 2 -0.5)  ->  0.7071068
               (** 15. 0)   ->  1.


     (/\ <n1> <n2>) [SUBR a 2 arguments]

          ramene le reste de la division de <n1> et <n2>.  Cette fonction
          est utilisee en general avec des arguments entiers pour ramener
          la valeur du reste d'une division entiere (la  fonction  MODULO
          ).   Le  caractere \ etant un macro-caractere, il faut le faire
          preceder du caractere / (quote caractere) pour  utiliser  cette
          fonction.  On doit ecrire (/\ 5 3) et non (\ 5 3) .

          ex : (/\ 5 3)    ->  2
               (/\ 5. 3.)  ->  2.980232E-8



     4.7  COMPARAISONS MIXTES

     Ces fonctions testent si leurs  deux  arguments  sont  des  nombres.
     Dans  le  cas  ou  ils  ne le seraient pas, une erreur apparait.  Le
     libelle de cette erreur est :
         <fonction> ** non numeric arg :  <argument>
     dans lequel le nom de  la  fonction  et  l'argument  incrimine  sont
     imprimes.

     Si les deux arguments sont de type entier, ces fonctions  effectuent
     des   comparaisons   entieres  (elles  sont  donc  equivalentes  aux
     fonctions de comparaison entieres), si au moins un des arguments est
     flottat, les comparaisons s'operent en flottant apres conversion, si
     necessaire de l'autre argument.


     (= <n1> <n2>) [SUBR a 2 arguments]

          ramene <n1> si <n1> et <n2> sont egaux.  Si <n1> est  different
          de <n2> = ramene NIL.

          ex : (= 378 378.)   ->  378.
     VLISP 10 . 3    Manuel de Reference                        Page 4-12


               (= 22 23)      ->  NIL


     (# <n1> <n2>) [SUBR a 2 arguments]

          ramene <n1> si <n1> est different de <n2>.  Si <n1> egal  <n2>,
          # ramene NIL.

          ex : (# 327.12 312)   ->  327.12
               (# 22.0 22)      ->  NIL


     (> <n1> <n2>) [SUBR a 2 arguments]

          ramene <n1>  si  <n1>  est  superieur  a  <n2>.   Si  <n1>  est
          inferieur ou egal a <n2>, > rameme NIL.

          ex : (> 327.12 327)  ->  327.12
               (> 327 327.1)   ->  NIL


     (>= <n1> <n2>) [SUBR a 2 arguments]

          ramene <n1> si <n1> est superieur ou egal a <n2>.  Si <n1>  est
          inferieur a <n2>, >= rameme NIL.

          ex : (>= 327. 327)  ->  327.  
               (>= 327 327.1)   ->  NIL


     (<= <n1> <n2>) [SUBR a 2 arguments]

          ramene <n1> si <n1> est inferieur ou egal a <n2>.  Si <n1>  est
          superieur a <n2>, >= rameme NIL.

          ex : (<= 327. 327)    ->  NIL   
               (<= 327 327.1)   ->  327


     (< <n1> <n2>) [SUBR a 2 arguments]

          ramene <n1>  si  <n1>  est  inferieur  a  <n2>.   Si  <n1>  est
          superieur ou egal a <n2>, < rameme NIL.

          ex : (< 327.12 327)  ->  NIL
               (< 327 327.1)   ->  327
     VLISP 10 . 3    Manuel de Reference                        Page 4-13


     4.8  FONCTIONS LOGIQUES

     Pour toutes les fonctions qui vont etre  decrites,  l'argument  s'il
     existe  doit  etre  de  type  entier.   Il  n'y  a pas de conversion
     automatique.  Ces fonctions ne provoquent jamais d'erreur.

     (COMPL <n>) [SUBR a 1 argument]

          ramene la valeur du complement logique de <n>

          ex : (COMPL 0)   ->  -1
               (COMPL -2)  ->  1


     (LOGAND <n1> <n2>) [SUBR a 2 arguments]

          Effectue l'operation de ET logique  entre  les  deux  operandes
          <n1>  et  <n2>.   (LOGAND <n1> <n2>) et equivalent a l'ancienne
          ecriture :  (BOOLE 5 <n1> <n2>).

          ex : (LOGAND \36 \25)   ->  \24


     (LOGSHIFT <n1> <n2>) [SUBR a 2 arguments]

          Effectue un decalage logique de la valeur <n1>, <n2> fois.   Si
          <n2>  est  >0  un  decalage  gauche  s'effectue,  dans  le  cas
          contraire (<n2> < 0), le decalage s'effectue a droite.

          ex : (LOGSHIFT 8 3)   ->  64
               (LOGSHIFT 8 -2)  ->  2


     (LOGOR <n1> <n2>) [SUBR a 2 arguments]

          Effectue l'operation de OU logique  entre  les  deux  operandes
          <n1>  et  <n2>.   (LOGOR <n1> <n2>) est equivalent a l'ancienne
          ecriture :  (BOOLE 1 <n1> <n2>).

          ex : (LOGOR \15 \7)   ->  \17


     (LOGXOR <n1> <n2>) [SUBR a 2 arguments]

          Effectue l'operation de OU  exclusif  logique  entre  les  deux
          operandes  <n1>  et  <n2>.   (LOGXOR <n1> <n2>) et equivalent a
          l'ancienne ecriture :  (BOOLE 9 <n1> <n2>).

          ex : (LOGXOR 5 3)   ->  6
     VLISP 10 . 3    Manuel de Reference                        Page 4-14


     (SWAP <n>) [SUBR a 1 argument]

          ramene la valeur resultant de l'echange des 18 bits  de  droite
          avec les 18 bits de gauche de <n>.

          ex: (SWAP \177333001)   ->  \333001000177



     4.9  FONCTIONS MATHEMATIQUES

     Pour toutes les fonctions qui vont etre  decrites,  l'argument  s'il
     existe  doit  etre  de  type  flottant.   Il n'y a pas de conversion
     automatique.


     (SQRT <n>) [SUBR a 1 argument]

          ramene la racine carree du nombre <n>.  <n> doit etre un nombre
          flottant positif.

          ex : (SQRT 25.)  ->  5.
               (SQRT 5.)   ->  2.236068
               (SQRT -5.)  ->
          %FRSLIB attempt to take SQRT of negative arg= 2.236068


     (SIN <n>) [SUBR a 1 argument]

          ramene la valeur du sinus de l'angle <n> exprime en radians.


     (COS <n>) [SUBR a 1 argument]

          ramene la valeur du cosinus de l'angle <n> exprime en radians.


     (ATAN <n>) [SUBR a 1 argument]

          ramene la valeur de la fonction arc tangente,  c'est-a-dire  la
          valeur de l'angle (en radians) dont la tangente est <n>.

          ; exemples d'utilisation des fonctions trigonometriques ;

          (SETQ PI   3.14159)   ->  3.14159
          (SETQ PI:2 (// PI 2)) ->  1.570795
          (SETQ PI:4 (// PI 4)) ->  0.7853975

          (SIN 0.)         ->  0
          (SIN PI:4)            ->  0.7071063
          (SIN PI:2)       ->  1.
     VLISP 10 . 3    Manuel de Reference                        Page 4-15


          (COS 0.)        ->  1.
          (COS PI:4)      ->  0.7071072
          (COS PI:2)      ->  1.334181E-6

          (SETQ X 1.2)         ->  1.2

          (SQRT (+ (** (SIN X) 2) (** (COS X) 2)))  ->  1.

          ; la fonction TANGENTE n'est pas standard : definissons-la ;

          (DE TANG (X)
             (// (SIN X) (COS X)))  ->  TANG

          (TANG 0.)            ->  0
          (TANG PI:4)          ->  0.9999987
          (TANG PI:2)          ->  749523.3

          (ATAN 0.)            ->  0
          (ATAN 1.)            ->  0.7853982
          (ATAN (TANG 1.123))  ->  1.123


     (EXP <n>) [SUBR a 1 argument]

          ramene la valeur e puissance <n>.

          ex : (EXP 0)     ->  1.
               (EXP 1.)    ->  2.718282


     (LOG <n>) [SUBR a 1 argument]

          ramene la valeur du logarithme neperien de <n>.

          ex : (LOG 1.)        ->  0
               (LOG 2.718282)  ->  1.


     (LOG10 <n>) [SUBR a 1 argument]

          ramene la valeur du logarithme decimal de <n>.

          ex : (LOG10 1.)      -> 0
               (LOG10 10.)     -> 1.
               (LOG10 20.)     -> 1.30103
               (LOG10 100.)    -> 2.
     VLISP 10 . 3    Manuel de Reference                        Page 4-16


     (RANDOM ) [SUBR a 0 argument]

          ramene a chaque appel un nombre  flottant,  aleatoire,  compris
          dans l'intervalle ]0.  , 1.[.

          ex : (RANDOM)  ->  0.1948187
               (RANDOM)  ->  0.7324636
               (RANDOM)  ->  0.6087399
                                                             Page Index-1


                         TABLE D'INDEX DU CHAPITRE 4




     (* n1 n2)  SUBR a 2 arguments  . . 4-10
     (** n1 n2)  SUBR a 2 arguments . . 4-11
     (+ n1 n2)  SUBR a 2 arguments  . . 4-10
     (- n1 n2)  SUBR a 2 arguments  . . 4-10
     (// n1 n2)  SUBR a 2 arguments . . 4-10
     (/\ n1 n2)  SUBR a 2 arguments . . 4-11
     (1+ n)  SUBR a 1 argument  . . . . 4-10
     (1- n)  SUBR a 1 argument  . . . . 4-10
     (= n1 n2)   SUBR a 2 arguments . . 4-11
     (ABS n)  SUBR a 1 argument . . . . 4-5
     (ADD1 n)  SUBR a 1 argument  . . . 4-5
     (ATAN n)  SUBR a 1 argument  . . . 4-14
     (COMPL n)  SUBR a 1 argument . . . 4-13
     (COS n)  SUBR a 1 argument . . . . 4-14
     (DIFFER n1 ... nn)  SUBR a n arguments  4-5
     (EQN n1 n2)   SUBR a 2 arguments . 4-7
     (EVENP n)  SUBR a 1 argument . . . 4-7
     (EXP n)  SUBR a 1 argument . . . . 4-15
     (FIX n)  SUBR a 1 argument . . . . 4-4
     (FIXP s)  SUBR a 1 argument  . . . 4-3
     (FLOAT n)  subr a 1 argument . . . 4-4
     (FLOATP s)  SUBR a 1 argument  . . 4-3
     (GE n1 n2 ... nn)  SUBR a n arguments  4-7
     (GEZP n)  SUBR a 1 argument  . . . 4-7
     (GT n1 n2 ... nn)  SUBR a n arguments  4-7
     (GZP n)  SUBR a 1 argument . . . . 4-8
     (INUMBP s)  SUBR a 1 argument  . . 4-3
     (LE n1 n2 ... nn)  SUBR a n arguments  4-8
     (LEZP n) SUBR a 1 argument . . . . 4-8
     (LOG n)  SUBR a 1 argument . . . . 4-15
     (LOG10 n)  SUBR a 1 argument . . . 4-15
     (LOGAND n1 n2)  SUBR a 2 arguments  4-13
     (LOGOR n1 n2)  SUBR a 2 arguments  4-13
     (LOGSHIFT n1 n2)  SUBR a 2 arguments  4-13
     (LOGXOR n1 n2)  SUBR a 2 arguements  4-13
     (LT n1 n2 ... nn)  SUBR a n arguments  4-8
     (LZP n)  SUBR a 1 argument . . . . 4-8
     (MAX n1 ... nn)   SUBR a n arguments  4-5
     (MIN n1 ... nn)   SUBR a n arguments  4-5
     (MINUS n)  SUBR a 1 argument . . . 4-5
     (NEQN n1 n2)   SUBR a 2 arguments  4-9
     (NEROP n) SUBR a 1 argument  . . . 4-9
     (NUMBP s)  SUBR a 1 argument   . . 4-3
     (ODDP n)  SUBR a 1 argument  . . . 4-9
     (PLUS n1 ... nn)  SUBR a n arguments  4-6
     (QUO n1 ... nn)  SUBR a n arguments  4-6
     (RANDOM)  SUBR a 0 argument  . . . 4-16
     (REM n1 n2)  SUBR a 2 arguments  . 4-6
     (SIN n)  SUBR a 1 argument . . . . 4-14
     (SQRT n)  SUBR a 1 argument  . . . 4-14
     (STATUS 5 n) base des nombres en entree  4-2
     (STATUS 6 n) base des nombres en sortie  4-2
     (SUB1 n)  SUBR a 1 argument  . . . 4-6
     (SWAP n)  SUBR a 1 argument  . . . 4-14
     (TIMES n1 ... nn)  SUBR a n arguments  4-6
     (TYPNUMB s)  SUBR a 1 argument . . 4-4
     (ZEROP n)  SUBR a 1 argument . . . 4-9
     (<= n1 n2)   SUBR a 2 arguments  . 4-12
     (< n1 n2)   SUBR a 2 arguments . . 4-12
     (>= n1 n2)   SUBR a 2 arguments  . 4-12
     (> n1 n2)   SUBR a 2 arguments . . 4-12
     (# n1 n2)   SUBR a 2 arguments . . 4-12

     ** arithmetic exception. pc : <pc>  4-1
     ** no room for numbers.  . . . . . 4-1
     ** non numeric arg : . . . . . . . 4-1, 4-4, 4-9, 4-11

     .  . . . . . . . . . . . . . . . . 4-2

     Bit 12 du r.g. . . . . . . . . . . 4-2
     Bit 13 du r.g. . . . . . . . . . . 4-2
     Bit 22 du r.g. . . . . . . . . . . 4-2
     Bit 23 du r.g. . . . . . . . . . . 4-2

     Debordement d'entier . . . . . . . 4-1
     Debordement flottant . . . . . . . 4-1
     Division par 0 . . . . . . . . . . 4-1

     FIX  . . . . . . . . . . . . . . . 4-4
     FLOAT  . . . . . . . . . . . . . . 4-4
     FORTRAN  . . . . . . . . . . . . . 4-1

     MODULO . . . . . . . . . . . . . . 4-11

     Petit entier . . . . . . . . . . . 4-3
     Program control. . . . . . . . . . 4-1

     \  . . . . . . . . . . . . . . . . 4-2